import os
import logging
from logging.handlers import RotatingFileHandler
from pathlib import Path


class LoggerConfig:
    """统一日志配置类"""
    # 日志级别
    LOG_LEVEL = logging.INFO

    # 日志格式
    LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s [in %(pathname)s:%(lineno)d]'

    # 日志目录
    LOG_DIR = Path(__file__).parent.absolute() / "logs"

    @classmethod
    def setup_logger(cls, logger_name: str, log_file: str = None) -> logging.Logger:
        """
        设置日志记录器
        
        Args:
            logger_name: 日志记录器名称
            log_file: 日志文件名，默认为None（只输出到控制台）
            
        Returns:
            配置好的日志记录器
        """
        # 确保日志目录存在
        cls.LOG_DIR.mkdir(exist_ok=True)

        # 创建日志记录器
        logger = logging.getLogger(logger_name)
        logger.setLevel(cls.LOG_LEVEL)

        # 避免重复添加处理器
        if not logger.handlers:
            # 创建控制台处理器
            console_handler = logging.StreamHandler()
            console_handler.setFormatter(logging.Formatter(cls.LOG_FORMAT))
            logger.addHandler(console_handler)

            # 创建文件处理器（如果指定了日志文件）
            if log_file:
                log_path = cls.LOG_DIR / log_file
                file_handler = RotatingFileHandler(
                    log_path,
                    maxBytes=1024 * 1024 * 5,  # 5MB
                    backupCount=10,
                    encoding='utf-8'
                )
                file_handler.setFormatter(logging.Formatter(cls.LOG_FORMAT))
                logger.addHandler(file_handler)

        return logger


# 创建默认日志记录器
logger = LoggerConfig.setup_logger(__name__, "app.log")

# 为不同模块创建专用日志记录器
app_logger = LoggerConfig.setup_logger("app", "app.log")
cron_logger = LoggerConfig.setup_logger("cron", "cron_task.log")
auto_logger = LoggerConfig.setup_logger("auto", "auto_task.log")
test_logger = LoggerConfig.setup_logger("test", "test_auto_task.log")
